#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>

#define d true

using namespace std;

MEAL_STARTERS = 301;
MEAL_MAIN_COURSE = 302;
MEAL_DESSERTS = 303;
MEAL_DRINKS = 304;


class Meal{
private:
	string name;
	double price;
	int type;
public:
	Meal(string n, double p, int t): name(n), price(p), type(t){}
	string getName();
	double getPrice();
	int getType();
};

string Meal::getName(){
	return this.name;
}

double Meal::getPrice(){
	return this.price;
}

int Meal::getType(){
	return this.type;
}

class StarterMeal:public Meal{
public:
	StarterMeal(string n, double p):Meal(n, p, MEAL_STARTERS){}
};

class MainCourseMeal:public Meal{
public:
	MainCourseMeal(string n, double p):Meal(n, p, MEAL_MAIN_COURSE){}
};

class DessertMeal:public Meal{
public:
	DessertMeal(string n, double p):Meal(n, p, MEAL_DESSERTS){}
};

class DrinkMeal:public Meal{
public:
	DrinkMeal(string n, double p):Meal(n, p, MEAL_DRINKS){}
};




class MealFactory{
public:
	MealFactory();
	vector<string> getMealTypes();
};

vector<string> MealFactory::getMealTypes(){
	vector<string> v;
	v.append("Starters");
	v.append("Main Course");
	v.append("Desserts");
	v.append("Drinks");

	return v;
}